/**
 * 条件化你的调试代码
 * 
 * 现在我们只需注释/取消注释#define ENABLE_DEBUG即可启用调试。这允许我们重用以前添加的调试语句，然后在使用完它们后禁用它们，而不必从代码中实际删除它们。
 * 如果这是一个多文件程序，#define ENABLE_DEBUG 将进入包含在所有代码文件中的头文件中，以便我们可以在单个位置注释/取消注释 #define 并将其传播到所有代码文件。
 * 这解决了必须删除调试语句的问题以及这样做的风险，但代价是代码更加混乱。
 * 这种方法的另一个缺点是，如果您输入错误（例如拼错“DEBUG”）或忘记将标头包含到代码文件中，则可能无法启用该文件的部分或全部调试。
 * 因此，尽管这比无条件版本更好，但仍有改进的空间。
 * 
 * 
 */

#include <iostream>

#define ENABLE_DEBUG // comment out to disable debugging

int getUserInput()
{
#ifdef ENABLE_DEBUG
std::cerr << "getUserInput() called\n";
#endif
	std::cout << "Enter a number: ";
	int x{};
	std::cin >> x;
	return x;
}

int main()
{
#ifdef ENABLE_DEBUG
std::cerr << "main() called\n";
#endif
    int x{ getUserInput() };
    std::cout << "You entered: " << x << '\n';

    return 0;
}